#ifndef _MMU_H_
#define _MMU_H_

#include "types.h"
#include "param.h"

// 虚拟地址分解宏（Sv39方案）[citation:10]
// 从虚拟地址va中提取第level级页表的索引（0,1,2）
#define PX(level, va) ((((uint64)(va)) >> PX_SHIFT(level)) & 0x1FF)

// 计算第level级页表索引的移位量
#define PX_SHIFT(level) (PAGE_SHIFT + 9 * (level))

// 页表条目类型
typedef uint64 pte_t;
// 页表类型（指向一个包含512个PTE的数组）
typedef pte_t* pagetable_t;

// 页表级别数量
#define PAGE_LEVELS 3

#endif // _MMU_H_